package main

import (
	"fmt"
	"strings"
)

func main() {
	fmt.Println(reverseWords("the sky is blue"))
}

func reverseWords(s string) string {
	// 开头可能没有空格，最后一个单词无法处理
	// 注意要在最开始，后面的i,j都依赖s的长度
	s = " " + s
	n := len(s)
	left := n - 1
	right := n

	var res strings.Builder
	for ; left >= 0; left-- {
		if s[left] == ' ' {
			sub := s[left+1 : right]
			if len(sub) != 0 {
				res.WriteString(sub)
				res.WriteString(" ")
			}
			right = left //注意每次遇到空格都要变换right位置，即使是连着的空格
		}
	}

	return strings.TrimSpace(res.String())
}

func reverseWordsV2(s string) string {
	if len(s) == 0 {
		return ""
	}
	parts := strings.Fields(s)
	i, j := 0, len(parts)-1
	for i < j {
		parts[i], parts[j] = parts[j], parts[i]
		i++
		j--
	}
	return strings.Join(parts, " ")
}
